package com.hua.argi;

import java.util.Arrays;

/**
 * @author: _hua
 * @created: 2019/3/25.
 * @updater:
 * @description:
 */
public class MyArray {

   private int array[];

   private int elems;

   private int length;


   public MyArray(){
        elems=0;
        length=50;
        array = new int[length];
    }

    public MyArray(int len){
        elems=0;
        this.length=len;
        array = new int[len];
    }

    //获取数组的有效长度
    public int getSize(){
       return elems;
    }

    /**
      * 遍历显示元素
      */
    public void dispaly(){
       //Arrays.stream(array).forEach(System.out::println);
        for(int i = 0 ; i < elems ; i++){
             System.out.print(array[i]+" ");
         }
        System.out.println();
    }


    /**
      * 添加元素
     * @param value,假设操作人是不会添加重复元素的，如果有重复元素对于后面的操作都会有影响。
     * @return添加成功返回true,添加的元素超过范围了返回false
     */
    public boolean add(int value){
        if (elems==length){
            return  false;
        }else{
            array[elems]=value;
            elems++;
        }
        return true;
    }
    /**
      * 根据下标获取元素
      * @param i
      * @return查找下标值在数组下标有效范围内，返回下标所表示的元素
      * 查找下标超出数组下标有效值，提示访问下标越界
     */
    public int get(int i){
        if (i<0||i>elems){
            System.out.println("访问下标越界");
        }
        return array[i];
    }

    /**
     * 查找元素
     * @param searchValue
     * @return查找的元素如果存在则返回下标值，如果不存在，返回 -1
     */
    public int find(int searchValue){
        int result=-1;
        for (int i=0;i<elems;i++){
            if(searchValue==array[i]){
                result=i;
                break;
            }
        }
        return result;
    }

    /**
     * 删除元素
     * @param value
     * @return如果要删除的值不存在，直接返回 false;否则返回true，删除成功
     */
    public boolean delete(int value){
        int k =find(value);
        if(k==-1){
            return false;
        }else{
            for(int i=k;i<elems-1;i++){
                array[i]=array[i+1];
            }
            elems--;
        }
        return true;
    }
    /**
     * 修改数据
     * @param oldValue
     * @param newValue
     * @return修改成功返回true，修改失败返回false
     */
    public boolean modify(int oldValue,int newValue){
        int k =find(oldValue);
        if(k==-1){
            return false;
        }else {
            array[k]=newValue;
            return true;
        }
    }
}
